﻿#ifndef SYMNODE_H
#define SYMNODE_H
#include <iostream>
#include <QString>

struct two_int {
    int vint;
    int vint2;
};

class SymNode
{
public:
    SymNode();

    std::string name;
    //不需要类型，因为name中可以反推出来。
    //还是加一个，表示函数和作用域
    int type;
    union {
        bool vbool;
        char vchar;
        unsigned short vwchar;
        int vint;
        qint64 vint64;
        struct two_int v2int; //分两个int，函数调用时，前一个表示调用时函数所在的偏移量，后一个表示需要返回值。
        double vfloat; //注意float直接使用double表示
        void* vpoint;
    }value;
    void* funRetValue; //函数返回值，目前只有是函数时，才赋值使用，其余为空。

    QString toString();
    //不放入到析构函数，外面调用。之前发现macos析构函数可能多次进入
    void destory();

    std::string getStructType();
    int getStructTypeId();

    /*
    STRUCT_VALUE_DATA* getStructPoint()
    {
        return (STRUCT_VALUE_DATA*)this->value.vpoint;
    }*/

    SymNode(const SymNode& other) = delete;
    SymNode& operator=(const SymNode& other) = delete;

};
#endif // SYMNODE_H
